package tests;

import common.Utils;
import org.openqa.selenium.*;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import javax.swing.*;
import java.text.SimpleDateFormat;
import java.time.Duration;
import java.util.List;

//发布博客页面
public class EditPage extends Utils {
    public static String url="http://8.148.81.42:8081/blog_edit.html";


    public EditPage()
    {
        super(url);
    }

    /**
     *1.正常发布博客
     */

    public void editSuc() throws InterruptedException {
        //清空内容
        driver.navigate().refresh();

        //创建的博客标题要随机生成，具备唯一性----方便后面进行精确校验
        SimpleDateFormat sim=new SimpleDateFormat("HHmmssSS");
        String titleTime = sim.format(System.currentTimeMillis());
        String title="自动创建博客"+titleTime;



        //找到标题输入框并输入内容
        driver.findElement(By.cssSelector("#title")).sendKeys(title);

        //找到内容区域并输入内容---会报错
        //driver.findElement(By.cssSelector("#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll")).sendKeys("zz内容");

        Thread.sleep(2000);
        //解决：通过原生的键盘操作来处理该元素--Actions
        WebElement ele=driver.findElement(By.cssSelector("#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll"));
        Actions action=new Actions(driver);
        action.doubleClick(ele).sendKeys("你的你的你的你的").perform();//双击内容区域
        //action.click(ele).sendKeys("你的你的你的你的").perform();//原生方法，单击后面附加内容


        Thread.sleep(2000);
        //点击发布
        driver.findElement(By.cssSelector("#submit")).click();
        //等待弹窗出现
        wait.until(ExpectedConditions.alertIsPresent());
        //选择”确定”----跳转到列表页
        Alert alert = driver.switchTo().alert();
        alert.accept();
        //Thread.sleep(2000);

        //校验是否发布成功
        //发布成功之后跳转到列表页,找是否存在刚创建的博客----博客标题

        //1.发布的博客在最后一条显示
        //List<WebElement> blogs=driver.findElements(By.cssSelector("body > div.container > div.right>div"));
        //String titleAfter=driver.findElement(By.cssSelector("body > div.container > div.right>div:nth-child("+blogs.size()+")>...")).getText();

        //2.发布的博客在第一条显示
        String titleAfter=driver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > div.title")).getText();
        //判断发布前后标题相同
        assert titleAfter.equals(title);


    }

    /**
     *2.异常发布
     * -----标题为空
     * -----内容为空
     * -----标题内容都为空
     */

    public void editFail() throws InterruptedException {
        //标题为空，内容不为空
        //点击发布
        driver.findElement(By.cssSelector("#submit")).click();
        //处理弹窗
        wait.until(ExpectedConditions.alertIsPresent());
        //选择”确定”
        Alert alert = driver.switchTo().alert();
        alert.accept();
        String curUrl = driver.getCurrentUrl();
        assert curUrl.equals("http://8.148.81.42:8081/blog_edit.html");

        //内容为空
        driver.findElement(By.cssSelector("#title")).sendKeys("好好好");
        Thread.sleep(2000);
        //解决：通过原生的键盘操作来处理该元素--Actions
        WebElement ele=driver.findElement(By.cssSelector("#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll"));
        Actions action=new Actions(driver);
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

       // 先等待元素可见，确保编辑器加载完成
        wait.until(ExpectedConditions.visibilityOf(ele));

        // 双击激活 → 等待选中生效 → 全选→ 删除
        action.doubleClick(ele) // 双击激活并选中内容
                .pause(Duration.ofMillis(500)) // 等待 500ms，确保选中状态生效
                .keyDown(Keys.CONTROL) // 按住 Ctrl 键
                .sendKeys("a") // 按 A 全选
                .keyUp(Keys.CONTROL) // 松开 Ctrl 键
                .sendKeys(Keys.BACK_SPACE) // 按删除键清空
                .perform();

        Thread.sleep(2000);
        //点击发布
        driver.findElement(By.cssSelector("#submit")).click();
        //等待弹窗出现
        wait.until(ExpectedConditions.alertIsPresent());
        //选择”确定”----返回当前页
        alert.accept();
        assert curUrl.equals("http://8.148.81.42:8081/blog_edit.html");


    }

    public void editLogout(){
        //点击注销按钮
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        //等待弹窗出现
        wait.until(ExpectedConditions.alertIsPresent());

        //处理错误弹窗

        //选择“取消”---返回当前页
        Alert cancelAlert = driver.switchTo().alert();
        cancelAlert.dismiss(); // 点击取消
        // Thread.sleep(2000);
        // 验证页面不变
        assert driver.getCurrentUrl().equals("http://8.148.81.42:8081/blog_list.html#");


        //点击注销按钮
        driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
        //等待弹窗出现
        wait.until(ExpectedConditions.alertIsPresent());
        //选择”确定”----跳转到用户登录
        Alert alert = driver.switchTo().alert();
        alert.accept();

        //退出浏览器
        driver.quit();

    }



}
